package com.ht.api.call.func.impl;

import java.util.ArrayList;
import java.util.List;

import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.util.RuleSqlUtil;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 根据前端设置的规则条件，统计符合条件的数量
 * @author asq
 * @createTime 2025年1月19日 09:21:33
 */
@Slf4j
public class RuleToCountFunctionCall implements IFunctionCall {

	@Override
	public String getName() {
		return "根据规则统计数量";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取参数
		JSONObject condition = param.getJSONObject("condition");
		
		// 查询
		List<Object> params = new ArrayList<>();
        String sql = RuleSqlUtil.buildConditionSql(condition, params);
        sql = "select bitmap_count(t.id) num from (" + sql + ") t";
        long count = Db.val(me.getDataSource(), sql, params);
		
		// 包装成JSONObject对象
		JSONObject json = JSONUtil.createObj();
		json.set("count", count);
		return json;
	}

}
